import { resolve } from 'path'
import pkg from './package.json'
import dayjs from 'dayjs'
import InitPlugin from './build/vite/plugins'
import dotenv from 'dotenv'
import { env } from './build/shared/env'
import type { UserConfig, ConfigEnv } from 'vite'
// import { defineConfig } from 'vite'
import fs from "fs"
import { createProxy } from './build/vite/proxy'

const { dependencies, devDependencies, name, version } = pkg
const __APP_INFO__ = {
	pkg: { dependencies, devDependencies, name, version },
	lastBuildTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
};

export default ({ command, mode }: ConfigEnv): UserConfig => {
	const isBuild = command === 'build'
	const opts = { command, mode, isBuild }

	return {
		// root: 'index.html',
		base: env.VITE_BASE_URL, //打包路径
		resolve: {
			alias: {
				'~': `${resolve(__dirname, 'src')}/`,
				'@': `${resolve(__dirname, 'src')}/`,
				'/assets': 'src/assets/',
				// 解决vue-i18n警告日志问题
				'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js'
			},
		},
		define: {
			// setting vue-i18-next
			// Suppress warning
			// __INTLIFY_PROD_DEVTOOLS__: false,
			// __APP_INFO__: JSON.stringify(__APP_INFO__),
		},
		plugins: [InitPlugin(env, opts)],
		optimizeDeps: {
			include: [
				// 'lodash.throttle', // if it is inlcuded here, error is gone 🐓
			]
		},
		// 打包配置
		build: {
			target: 'es2015',
			cssTarget: 'chrome65',
			outDir: 'dist', //指定输出路径
			assetsDir: 'assets', // 指定生成静态资源的存放路径
			minify: 'terser', // 混淆器，terser构建后文件体积更小
			emptyOutDir: true,
			commonjsOptions: {
				// transformMixedEsModules: true,
				// include: [/node_modules/],
				// extensions: ['.js', '.cjs'],
				// ...raw?.commonjsOptions
			},
			// 清除console和debugger
			terserOptions: {
				compress: {
					drop_console: true, // 默认true
					drop_debugger: true, // 默认true
				},
			},
			//警报门槛，限制大文件大小
			// chunkSizeWarningLimit: 1500,
			rollupOptions: {
				output: {
					// 对静态文件进行打包处理（文件分类）
					//此处打开后会导致背景图路径有问题，所以暂时隐藏，未找到合适的解决方案
					// chunkFileNames: 'assets/js/[name]-[hash].js',
					// entryFileNames: 'assets/js/[name]-[hash].js',
					// assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
					// manualChunks(id) { //静态资源分拆打包
					// 	if (id.includes('node_modules')) {
					// 		return id.toString().split('node_modules/')[1].split('/')[0].toString();
					// 	}
					// }
				},
			},
		},
		css: {
			preprocessorOptions: {
				// 引入公用的样式
				// scss: {
				// 	additionalData: ['@import "@/styles/common.scss";']
				// },
				publicDir: 'public', // 可以是文件系统的绝对路径path.resolve(__dirname, 'public') 也可以是相对路径
				// assetsInclude: ['**/*.gltf'], // 图片等会被默认当做静态资源，这个选项可以增加更多的静态资源文件类型
				less: {
					charset: false,
					// modifyVars: generateModifyVars(),
					// globalVars: {
					// 	cdnUrl: JSON.stringify('https://www.baidu.com'),
					// },
					// additionalData: `@import "${resolve(__dirname, 'src/styles/main.css')}";`,
					javascriptEnabled: true,
				},
				build: {
					// 	cssCodeSplit: true, // 开启或者禁用，打包时的 css 代码拆分
					assetsInlineLimit: 4096, // 静态资源大小小于这个数值的，会在打包时内联为 base64 ，减少http 请求
				},
			},
		},
		server: {
			port: 3000, //启动端口
			open: true,
			proxy: createProxy(env.VITE_PROXY),
			cors: true,
		},
	}
}
